/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Paginador.java
 *
 * Created on 12/06/2011, 16:40:45
 */
package util;

import dao.DAO;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author emersonmx
 */
public class Paginador extends javax.swing.JPanel {

  /** Creates new form Paginador */
  public Paginador(DAO dao) {
    this.dao = dao;
    listeners = new ArrayList();
    initComponents();
  }

  public void addPaginadorListener(PaginadorListener l) {
    if (!listeners.contains(l)) {
      listeners.add(l);
    }
  }

  public void removePaginadorListener(PaginadorListener l) {
    listeners.remove(l);
  }

  public int getQuantidadeResultados() {
    return quantidadeResultados;
  }

  public void setQuantidadeResultados(int quantidadeResultados) {
    this.quantidadeResultados = quantidadeResultados;
  }

  private void disparouMostrouPagina() {
    List r = dao.pesquisar(quantidadeResultados, (indicePagina - 1) * quantidadeResultados);
    for(PaginadorListener pl : listeners) {
      pl.mudaPagina(r);
    }
  }

  public void mostrouPagina() {
    disparouMostrouPagina();
  }

  private void mover(int i) {
    indicePagina += i;

    int qt = dao.contar();

    if (indicePagina < 1) {
      indicePagina = 1;
    } else if (indicePagina * quantidadeResultados > qt) {
      if (qt / (float) quantidadeResultados > qt / quantidadeResultados) {
        indicePagina = qt / quantidadeResultados + 1;
      } else {
        indicePagina = qt / quantidadeResultados;
      }
    }

    if (qt == 0) {
      indicePagina = 1;
    }

    pagina.setText(String.valueOf(indicePagina));
    disparouMostrouPagina();
  }

  @SuppressWarnings("unchecked")
  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
  private void initComponents() {

    btPrimeiro = new javax.swing.JButton();
    btAnterior = new javax.swing.JButton();
    pagina = new javax.swing.JLabel();
    btProximo = new javax.swing.JButton();
    btUltimo = new javax.swing.JButton();

    setLayout(null);

    btPrimeiro.setText("<<");
    btPrimeiro.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        btPrimeiroActionPerformed(evt);
      }
    });
    add(btPrimeiro);
    btPrimeiro.setBounds(0, 0, 60, 33);

    btAnterior.setText("<");
    btAnterior.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        btAnteriorActionPerformed(evt);
      }
    });
    add(btAnterior);
    btAnterior.setBounds(60, 0, 60, 33);

    pagina.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
    pagina.setText("1");
    pagina.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING);
    add(pagina);
    pagina.setBounds(120, 0, 70, 33);

    btProximo.setText(">");
    btProximo.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        btProximoActionPerformed(evt);
      }
    });
    add(btProximo);
    btProximo.setBounds(190, 0, 60, 33);

    btUltimo.setText(">>");
    btUltimo.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        btUltimoActionPerformed(evt);
      }
    });
    add(btUltimo);
    btUltimo.setBounds(250, 0, 60, 33);
  }// </editor-fold>//GEN-END:initComponents

  private void btPrimeiroActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btPrimeiroActionPerformed
    mover(-indicePagina);
  }//GEN-LAST:event_btPrimeiroActionPerformed

  private void btAnteriorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAnteriorActionPerformed
    mover(-1);
  }//GEN-LAST:event_btAnteriorActionPerformed

  private void btProximoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btProximoActionPerformed
    mover(1);
  }//GEN-LAST:event_btProximoActionPerformed

  private void btUltimoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btUltimoActionPerformed
    mover((dao.contar() / quantidadeResultados) + 1);
  }//GEN-LAST:event_btUltimoActionPerformed
  private int indicePagina = 1;
  private int quantidadeResultados = 15;
  private DAO dao;
  private List<PaginadorListener> listeners;
  // Variables declaration - do not modify//GEN-BEGIN:variables
  private javax.swing.JButton btAnterior;
  private javax.swing.JButton btPrimeiro;
  private javax.swing.JButton btProximo;
  private javax.swing.JButton btUltimo;
  private javax.swing.JLabel pagina;
  // End of variables declaration//GEN-END:variables
}
